{{tag>console BROUILLON}}

----

====== JSON Query (jq) ======

Cette commande est utilisée en [[:tutoriel/console_ligne_de_commande|ligne de commande]] pour mettre en forme du code [[wpfr>JavaScript_Object_Notation|JSON]] et n'afficher qu'une partie des enregistrements et/ou attributs.\\
Elle particulièrement intéressante avec la commande //cUrl// lors d'exécution de tests en [[:CLI|ligne de commande]] pour par exemple questionner une base de données, notamment via une **API REST**

===== Installation =====

Installer avec les [[:sudo|droits d'administration]] le paquet jq
<code bash>
apt install jq
</code>

===== Utilisation =====
On peut l'utiliser simplement :
<code bash>
curl service:<port>/<table_ou_vue> | jq
</code>

On peut aussi ne récupérer qu'un attribut (dans le cas où seule une liste sans clé supérieure est retournée, sinon reportez-vous à l'exemple concret plus pas) :
<code bash>
curl service:<port>/<table_ou_vue> | jq '.[] | .mon_attribut'
</code>

Et on peut ne prendre que certains enregistrements, par exemple, si vous avez 10 enregistrements, pour voir les données que du 3ème et 4ème :
<code bash>
curl service:<port>/<table_ou_vue> | jq '.[3:5]'
</code>

ou des deux derniers :
<code bash>
curl service:<port>/<table_ou_vue> | jq '.[-2:]'
</code>

Exemple pour extraire, à partir de l'[[https://adresse.data.gouv.fr/api-doc/adresse|API REST d'Etalab]], le nom d'une rue lyonnaise à partir de la chaîne //professeur// (et du code postal 69007), et ne récupérer que le premier retour (au cas où il y en aurait plusieurs)
<code bash>
curl "https://api-adresse.data.gouv.fr/search/?q=professeur&postcode=69007&limit=3" | jq '.features[0].properties.name'
# retourne :
"Rue Professeur Grignard"
</code>

Autre exemple avec [[:elasticsearch]] en reprenant l'exemple autour des //movies// :
<code bash>
curl "localhost:9200/_search" -X GET -H "Content-Type: application/json" -d '{"query":{"match_all": {}}}' \
 | jq '.hits.hits[] | ._source.movies.title'
</code>

Source : [[https://dev-tips.com/tools/using-jq-to-filter-json-output]]

----

//Contributeur : [[:utilisateurs/bcag2]]//